Given two sequences pushed
and popped
with distinct values, return true
if and only if this could have been the result of a sequence of push and pop operations on an initially empty stack.
Example 1:
1 | Input: pushed = [1,2,3,4,5], popped = [4,5,3,2,1] |
Example 2:
1 | Input: pushed = [1,2,3,4,5], popped = [4,3,5,1,2] |
题意是说,给定一个入栈序列和一个可能的出栈序列,问在给定的入栈序列下能否得到出栈序列。如果能返回true,否则返回false。
此题的解决是模拟。模拟入栈入栈并出栈的问题,尽量得到和给定的出栈序列一致的出栈序列。如例1,首先为了得到第一个出栈的是4,则必须将[1,2,3,4]入栈,然后将4出栈,则从栈底到栈顶的元素分别为[1,2,3]。第二步,为了得到出栈序列中的第二位5,必须将5入栈,然后将5出栈,得到出栈序列中的第二位,此时,栈中栈底到栈顶的各元素分别为[1,2,3]。第三步为了得到3,直接将栈顶元素出栈即可。第四步和第五步同第三步。
对于例2,同样,第一步为了得到出栈序列中的4,将1,2,3,4依次入栈,并将4出栈,得到出栈序列中的第一位,此时栈底到栈顶的各元素为[1,2,3]。第二步,为了得到出栈序列中的第二位3,将此时的栈顶元素3直接出栈即可。第三步,为了得到5,将5入栈,继而出栈,得到出栈序列[4,3,5]。第四步,需要得到出栈序列中的第四位1,每一步当我们希望得到出栈序列中的下一位时,我们有两个选择,要么这一位还未入栈,如第一步中的4,对于这种情况,我们需要将后续元素入栈,另一种情况是,这一位就是栈顶元素,如第二步中的3。此时,所有入栈序列中的元素都已经入栈,那么只有一种可能了,那就是出栈序列中的下一位就是栈顶元素。但是,通过比较出栈序列中的下一位和栈顶元素可知,栈顶元素不是出栈序列中的下一位,因此,此出栈序列无法由入栈序列得到,返回false。
AC代码
1 | class Solution { |